﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CI.Caja.BE;
using System.Data.SqlClient;

namespace CI.Caja.DL
{
   public class DA_DetalleArqueo : IDA_DetalleArqueo
    {

     //   private CI.Caja.DL.DA_Cargo cargoDAO = new CI.Caja.DL.DA_Cargo();


       public ICollection<BE_DetalleArqueo> ListarDetalleArqueo(int idArqueo)
       {
           ICollection<BE.BE_DetalleArqueo> arqueoDetalleExistente = new List<BE.BE_DetalleArqueo>();
           BE_DetalleArqueo detallearqueo = null;

           //string sentencia = "SELECT idArqueo,idDetalle,idMoneda,idDenominacion,numCantidad FROM CA_DETALLEARQUEO WHERE idArqueo=@idArqueo";
           string sentencia = "SELECT idArqueo,idDetalle,Moneda=txtNombreMoneda,Denominacion=txtDescripcion,numCantidad FROM CA_DETALLEARQUEO D INNER JOIN CA_MONEDA M ON D.idMoneda=M.idMoneda INNER JOIN CA_DENOMINACION DE ON D.idDenominacion=DE.idDenominacion WHERE idArqueo=@idArqueo";

           using (SqlConnection conexion = new SqlConnection(DA_Utilitario.ObtenerConexion()))
           {
               conexion.Open();
               using (SqlCommand comando = new SqlCommand(sentencia, conexion))
               {

                   comando.Parameters.Add(new SqlParameter("@idArqueo", idArqueo));
                   SqlDataReader resultado = comando.ExecuteReader();
                   while (resultado.Read())
                   {
                       detallearqueo = new BE_DetalleArqueo();
                       detallearqueo.IdArqueo = (int)resultado["idArqueo"];
                       detallearqueo.IdDetalle = (int)resultado["idDetalle"];
                       detallearqueo.Moneda = (string)resultado["Moneda"];
                       detallearqueo.Denominacion = (string)resultado["Denominacion"];
                       detallearqueo.Cantidad = (int)resultado["numCantidad"];

                       arqueoDetalleExistente.Add(detallearqueo);
                   }
               }
           }
           return arqueoDetalleExistente;
       }


       public BE_DetalleArqueo RegistrarDetalleArqueo(BE_DetalleArqueo detallearqueo)
        {

            string sentencia = "INSERT INTO CA_DETALLEARQUEO(idArqueo,idDetalle,idMoneda,idDenominacion,numCantidad) VALUES (@idArqueo,@idDetalle,@idMoneda,@idDenominacion,@numCantidad)";
            
            //SqlTransaction transaccion;
            //using (SqlConnection conexion = new SqlConnection(DA_Utilitario.ObtenerConexion()))
            using (SqlConnection conexion = DA_SingletonConexion.ConnectionInstance)
            {
                conexion.Open();
                //transaccion = conexion.BeginTransaction();

                try
                {
                    using (SqlCommand comando = new SqlCommand(sentencia, conexion))
                    {
                        comando.Parameters.Add(new SqlParameter("@idArqueo", detallearqueo.IdArqueo));
                       // comando.Parameters.Add(new SqlParameter("@idArqueo", ObtenerCodigo()));
                        comando.Parameters.Add(new SqlParameter("@idDetalle", detallearqueo.IdDetalle));
                        comando.Parameters.Add(new SqlParameter("@idMoneda", detallearqueo.IdMoneda));
                        comando.Parameters.Add(new SqlParameter("@idDenominacion", detallearqueo.IdDenominacion));
                        comando.Parameters.Add(new SqlParameter("@numCantidad", detallearqueo.Cantidad));
                        comando.ExecuteNonQuery();
                    }
                }
                catch (SqlException error)
                {
                    throw new Exception(error.Message);
                }
                finally
                {
                    if (conexion != null)
                    {
                        if (conexion.State == System.Data.ConnectionState.Open) conexion.Close();
                    }
                }

            }
            return ObtenerDetalleArqueo(detallearqueo.IdDetalle);
        }


       public BE_DetalleArqueo ObtenerDetalleArqueo(int idDetalle)
        {
            BE_DetalleArqueo detallearqueo = null;

            string sentencia = "SELECT idArqueo,idDetalle,idMoneda,idDenominacion,numCantidad FROM CA_DETALLEARQUEO WHERE idDetalle=@idDetalle";
           // using (SqlConnection conexion = new SqlConnection(DA_Utilitario.ObtenerConexion()))
            using (SqlConnection conexion = DA_SingletonConexion.ConnectionInstance)
            {
                conexion.Open();

                 try
               {
                using (SqlCommand comando = new SqlCommand(sentencia, conexion))
                {
                    comando.Parameters.Add(new SqlParameter("@idDetalle", idDetalle));

                    SqlDataReader resultado = comando.ExecuteReader();
                    if (resultado.Read())
                    {
                        detallearqueo = new BE_DetalleArqueo();
                        detallearqueo.IdArqueo = (int)resultado["idArqueo"];
                       // detallearqueo.IdArqueo = Convert.ToInt32(ObtenerCodigo());
                        detallearqueo.IdDetalle = (int)resultado["idDetalle"];
                        detallearqueo.IdMoneda = (int)resultado["idMoneda"];
                        detallearqueo.IdDenominacion = (int)resultado["idDenominacion"];
                        detallearqueo.Cantidad = (int)resultado["numCantidad"];
                        

                    }
                }

               }
                 catch (SqlException error)
                 {
                     throw new Exception(error.Message);
                 }
                 finally
                 {
                     if (conexion != null)
                     {
                         if (conexion.State == System.Data.ConnectionState.Open) conexion.Close();
                     }
                 }
            }
            return detallearqueo;
        }


       public string ObtenerCodigo()
       {
           string codigo = "";
           string sentencia = "Select  ISNULL(MAX(idarqueo),0)+1 as Codigo from CA_ARQUEO";
          // using (SqlConnection conexion = new SqlConnection(DA_Utilitario.ObtenerConexion()))
           using (SqlConnection conexion = DA_SingletonConexion.ConnectionInstance)
           {
               conexion.Open();

                try
               {
               using (SqlCommand comando = new SqlCommand(sentencia, conexion))
               {
                   SqlDataReader resultado = comando.ExecuteReader();
                   if (resultado.Read())
                   {
                       codigo = resultado["Codigo"].ToString();

                   }
               }


               }
                catch (SqlException error)
                {
                    throw new Exception(error.Message);
                }
                finally
                {
                    if (conexion != null)
                    {
                        if (conexion.State == System.Data.ConnectionState.Open) conexion.Close();
                    }
                }
           }
           return codigo;
       }
    }
}
